//package com.yc.security.controller;
//
//import javax.servlet.http.HttpServletRequest;
//
//import com.yc.JwtRequest;
//import com.yc.JwtResponse;
//import com.yc.security.entities.JwtUser;
//import com.yc.security.utils.JwtTokenUtil;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.ResponseEntity;
//import org.springframework.security.authentication.AuthenticationManager;
//import org.springframework.security.authentication.BadCredentialsException;
//import org.springframework.security.authentication.DisabledException;
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
//import org.springframework.security.core.Authentication;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.web.bind.annotation.CrossOrigin;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestBody;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.ArrayList;
//import java.util.List;
//
//
///**
// * JwtAuthenticationController
// * 	包含登陆和查看token的方法
// * @author
// */
//@RestController
//@CrossOrigin
//public class JwtAuthenticationController {
//
//	/**
//	 * 注入认证管理器
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:13
//	 */
//	@Autowired
//	private AuthenticationManager authenticationManager;
//
//	/**
//	 * 注入jwt token工具类
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:13
//	 */
//	@Autowired
//	private JwtTokenUtil jwtTokenUtil;
//
//	/**
//	 * 注入userDetails
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:15
//	 */
//	@Autowired
//	private UserDetailsService jwtUserDetailsServiceImpl;
//
//
//	@Value("${jwt.header}")
//	private String tokenHeader;
//
//	/**
//	 * 根据用户名密码获取token
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:16
//	 */
//	@PostMapping("${jwt.route.authentication.path}")
//	public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtRequest authenticationRequest) throws Exception {
//
//
//
//
//		System.out.println("username:"+authenticationRequest.getUsername()+",password:"+authenticationRequest.getPassword());
//
//
//		authenticate(authenticationRequest.getUsername(), authenticationRequest.getPassword());
//		final UserDetails userDetails = jwtUserDetailsServiceImpl
//				.loadUserByUsername(authenticationRequest.getUsername());
//		final String token = jwtTokenUtil.generateToken(userDetails);
//
//		List<Object> list = new ArrayList<>();
//
//		return ResponseEntity.ok(new JwtResponse(token,list));
//	}
//
//	/**
//	 * 认证用户名密码
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:17
//	 */
//	private void authenticate(String username, String password) throws Exception {
//		try {
//			authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
//		} catch (DisabledException e) {
//			throw new Exception("USER_DISABLED", e);
//		} catch (BadCredentialsException e) {
//			throw new Exception("INVALID_CREDENTIALS", e);
//		}
//	}
//
//	/**
//	 * 获取用户权限信息
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:18
//	 */
//	@GetMapping("/token")
//	public JwtUser getAuthenticatedUser(Authentication authentication) {
//		JwtUser userInfo = (JwtUser) authentication.getPrincipal();
//		System.out.println(userInfo);
//		return userInfo;
//	}
//
//	/**
//	 * 获取用户权限信息
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:18
//	 */
//	@GetMapping("/tokenTwo")
//	public JwtUser getAuthenticatedUser(HttpServletRequest request) {
//		String token = request.getHeader(tokenHeader).substring(7);
//		String username = jwtTokenUtil.getUsernameFromToken(token);
//		JwtUser user = (JwtUser) jwtUserDetailsServiceImpl.loadUserByUsername(username);
//		return user;
//	}
//
//	/**
//	 * 获取用户权限信息
//	 * @title
//	 * @author kukaha
//	 * @updateTime  16:18
//	 */
//	@GetMapping("/tokenThree")
//	public JwtUser getAuthenticatedUser() {
//		JwtUser userInfo = (JwtUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
//		System.out.println(userInfo);
//		return userInfo;
//	}
//}
//
